package cn.com.huzo.repository.trade;

import cn.com.huzo.model.entities.trade.DeliveryCommandSheetLinesEntity;
import cn.com.huzo.model.entities.trade.DeliveryCommandSheetLinesMoEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 发货发令单明细数据访问对象接口。
 *
 * @author 吴旭
 */
public interface DeliveryCommandSheetLinesRepository extends GenericRepository<DeliveryCommandSheetLinesEntity, String> {

    /**
     * 根据ID取得发货发令单明细信息。
     *
     * @param headerId 发货发令单ID
     * @return 插入的数据主键
     */
    List<DeliveryCommandSheetLinesEntity> fetchByHeaderId(Long headerId);

    /**
     * 根据ID+款号，取得发货发令单某款号下的明细信息。
     *
     * @param headerId 发货发令单ID
     * @param styleNo 款号
     * @return 插入的数据主键
     */
    List<DeliveryCommandSheetLinesEntity> fetchByHeaderIdAndStyleNo(Long headerId, String styleNo);

    /**
     * 取得该发令单全部明细
     *
     * @param criterion
     * @return
     */
    List<String> fetchAllSelectedLines(Map<String, Object> criterion);

    /**
     * 新增发货发令单明细信息。
     *
     * @param instance 引入的生产指示书数据
     * @return 影响的行数
     */
    Integer insert(DeliveryCommandSheetLinesMoEntity instance);

    /**
     * 因为删除引入的指示书，因此删除对应发货发令单明细信息。
     *
     * @param criterion 要删除的数据linesID
     * @return 影响的行数
     */
    Integer deleteByLinesMo(Map<String, Object> criterion);

    // <editor-fold defaultstate="collapsed" desc="款号顺序操作">
    /**
     * 取得该发货发令单的款号顺序
     *
     * @param headerId 发货发令单ID
     * @return
     */
    List<Map<String, Object>> fetchLinesStyleNoOrderByHeaderId(Long headerId);

    /**
     * 插入发货发令单明细款号顺序
     *
     * @param headerId 发货发令单ID
     * @return 影响行数
     */
    Integer insertLinesStyleNoOrder(Long headerId);

    /**
     * 重设款号排序
     *
     * @param itemList 排序数据
     * @return
     */
    Integer updateLinesStyleNoOrder(List<Map<String, Object>> itemList);

    /**
     * 删除款号排序
     *
     * @param headerId 发货发令单ID
     * @return
     */
    Integer deleteLinesStyleNoOrder(Long headerId);
    // </editor-fold>
}
